# -*- coding: utf-8 -*-

'''
Python 2.7
标准库 urllib
'''

import urllib

#print dir(urllib)
#print help(urllib.urlopen) #post get

url = "http://www.iplaypython.com"
#url = "http://www.163.com/"

html = urllib.urlopen(url)

#print html.read().decode("gbk").encode('utf-8')
#print html.read().decode("gbk").encode('utf-8')

'''
1.抓取网页之前要获取网页的头部信息

Last－Modified:Wed,19 Feb 2014 01:42:21 GMT
Etag:"网页唯一标识，网页修改更新后会变"

爬虫根据Last－Modified和Etag来看网页是否更新
'''
print html.info()

'''
2、判断网页的返回值,只有返回值200的网页可以抓取
301网页重定向 404网页不存在 403禁止访问(有可能服务器设置了禁止爬虫抓取或者访问限制)
http权威指南,介绍http协议。web开发必备
'''
#获取状态码
code = html.getcode()
#print type(code)
if code == 200:
    #print html.read()
    print html.info()
else:
    print 404

#获取访问路径
print html.geturl();

def callback(a,b,c):
    '''
    :param a: 目前为此传递的数据块数量
    :param b: 是每个数据块的大小，单位是byte，字节
    :param c:远程文件的大小
    :return:
    '''
    down_progress = 100.0 * a * b /c
    if down_progress > 100:
        down_progress = 100
    print "%.2f%%" % down_progress,a,b,c

'''
urlretrieve
1、传入网址，网址类型一定是字符串。
2、传入的，本地的网页保存路径＋文件名
3、一个函数的调用，我们可以任意来定义这个函数的行为，但是一定要保证这个回调函数有3个参数。
（1）到目前为此传递的数据快数量
（2）是每个数据块的大小，单位是byte，字节
（3）远程文件的大小，（有时会返回－1）
'''
#网页抓取，下载网页
local = "/Users/wangjunjie/Documents/照片/abc.html"
urllib.urlretrieve(url,local,callback)
#urllib.urlretrieve(url,"/Users/wangjunjie/Documents/照片/abc.html")

'''
获取网页编码
有的能够获取有的获取结果是none，是因为有的网站在头部有声明有的没有声明。
'''
urlyk = "http://www.youku.com"
#url = "http://www.163.com/"

'''
从头部里面获取字符编码
'''
print urllib.urlopen(url).info().getparam('charset')

import chardet #字符集检测

content = urllib.urlopen(url).read()
'''
综合检测网页的编码，一般大于0.9的都是准确的
'''
print chardet.detect(content)
#检测字符串
print chardet.detect("我是圆圆")

def automatic_detect(url):
    content = urllib.urlopen(url).read()
    result = chardet.detect(content)
    encoding = result['encoding']
    return encoding


urls = ["http://o2o.zj96596.com/o2o/app/index.html#/welcome",
        "https://www.baidu.com/",
        "http://www.163.com/"]
for url in urls:
    print url,automatic_detect(url)



